<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // let p1 = new Promise(resolve => {
        //     resolve(111);
        // })
        // let p2 = new Promise(resolve => {
        //     resolve(555);
        // })
        // let p3 = new Promise(resolve => {
        //     resolve(666);
        // })
        // let p4 = new Promise(resolve => {
        //     resolve(777);
        // })
        // p1.then(res =>{
        //     console.log(res);
        //     return p2
        // }).then(res =>{
        //     console.log(res);
        // })

        function fn1(){
            return new Promise(resolve =>{
                setTimeout(()=>{
                    resolve(666)
                },1000)
            })
        }
        function fn2(){
            return new Promise(resolve =>{
                setTimeout(()=>{
                    resolve(222)
                },2000)
            })
        }
        function fn3(){
            return new Promise(resolve =>{
                setTimeout(()=>{
                    resolve(333)
                },3000)
            })
        }
        function fn4(){
            return new Promise((resolve,reject) =>{
                setTimeout(()=>{
                    resolve(444)
                },4000)
            })
        }
        // catch()方法 捕捉当前链式方法上的错误
        // fn1().then(res =>{
        //     return fn2()
        // }).then(res =>{
        //     return fn3()
        // }).then(res =>{
        //     return fn4()
        // }).then(res =>{
        // }).catch(err =>{
        //     console.log(err);
        // })

        // race()方法 返回执行最快的Promise对象结果 可以以数组的形式传入多个Promise对象
        Promise.race([fn1(),fn2(),fn3(),fn4()]).then(res =>{
            console.log(res);
        })
        // all()方法 以数组的方式返回所有Promise对象为正确方法的结果 如果有一个执行错误，直接报错
        Promise.all([fn1(),fn2(),fn3(),fn4()]).then(res =>{
            console.log(res);
        })
        
        // // allSettled()方法 返回所有Promise对象的执行结果 以数组对象的方式返回
        // Promise.allSettled([fn1(),fn2(),fn3(),fn4()]).then(res =>{
        //     console.log(res);
        // })



    </script>
</body>
</html>